/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;

import com.comac.ins.common.core.domain.model.LoginUser;
import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import com.comac.ins.isfd.domain.bo.*;
import com.comac.ins.isfd.domain.bo.query.IsfdModelManagementPartQueryBo;
import com.comac.ins.isfd.domain.vo.IsfdModelManagementConfirmImportPartVo;
import com.comac.ins.isfd.domain.vo.IsfdModelManagementPartOuterVo;
import com.comac.ins.isfd.domain.vo.IsfdModelManagementPartVo;
import com.comac.ins.isfd.domain.vo.IsfdModelManagementStructureDefinitionTreeNodeVo;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 模型管理零件Service接口
 *
 * @author Lion Li
 * @date 2024-08-14
 */
public interface IIsfdModelManagementPartService {

    /**
     * 根据部段编码查询组件
     */
    List<String> getComponentBySection(String modelNumber, String batchNumber, String sectionNumber, Boolean necessaryItemsFlag);

    /**
     * 选零件
     */
    List<IsfdModelManagementPartOuterVo> selectPart(List<IsfdModelManagementSelectPartBo> selectList);

    /**
     * 查询模型管理零件
     *
     * @param id 主键
     * @return 模型管理零件
     */
    IsfdModelManagementPartVo queryById(Long id);

    /**
     * 模型管理左侧树查询
     */
    List<IsfdModelManagementStructureDefinitionTreeNodeVo> listTree();

    /**
     * 分页查询模型管理零件列表
     */
    TableDataInfo<IsfdModelManagementPartOuterVo> queryPageList(IsfdModelManagementPartQueryBo bo);


    /**
     * 根据零件id集合查询零件
     */
    List<IsfdModelManagementPartVo> queryList(List<Long> partIdList);


    /**
     * 查询零件，包括版本
     */
    IsfdModelManagementPartOuterVo detail(String modelNumber,
                                          String batchNumber,
                                          String sectionNumber,
                                          String componentNumber,
                                          String partNumber);


    /**
     * 查询唯一零件
     */
    IsfdModelManagementPartVo getUniquePartVo(String modelNumber,
                                              String batchNumber,
                                              String sectionNumber,
                                              String componentNumber,
                                              String partName);

    /**
     * 查询符合条件的模型管理零件列表
     *
     * @param bo 查询条件
     * @return 模型管理零件列表
     */
    List<IsfdModelManagementPartVo> queryList(IsfdModelManagementPartBo bo);

    /**
     * 规则检查
     */
    List<IsfdModelManagementPartVo> checkImport(MultipartFile file, String modelNumber, String batchNumber, String indexFileName);

    /**
     * 修改零组件号
     */
    IsfdModelManagementPartVo update(IsfdModelManagementUpdateImportPartBo bo);


    /**
     * 确认导入，多线程操作
     */
    IsfdModelManagementConfirmImportPartVo confirmImportPartitions(IsfdModelManagementPartConfirmImportBo bo, LoginUser loginUser);

    /**
     * 导入取消
     */
    Boolean cancelImport(List<Long> ids);

    /**
     * 导出模型零组件清单
     */
    void bomExport(String modelNumber, HttpServletResponse response);

//    /**
//     * 下载
//     */
//    void bdfDownload(String modelNumber, HttpServletResponse response);


    /**
     * 单个零件导入
     */
    IsfdModelManagementPartVo singleImport(IsfdModelManagementPartBo partBo);

    /**
     * 单个零件导入-规则检查
     */
    IsfdModelManagementPartVo checkSingleImport(MultipartFile file, String modelNumber, String batchNumber, String sectionNumber, String componentNumber);

    /**
     * 新增一个零件，返回主键id
     */
    Long insert(IsfdModelManagementPartBo isfdModelManagementPartBo);

    Map<String, String> getExistingVersions(IsfdModelManagementPartBo partBo);

    /**
     * 删除零件版本及文件
     */
    String deletePartById(Long id);


    /**
     * 组件导入-规则检查
     */
    List<IsfdModelManagementPartVo> componentCheckImport(MultipartFile file, String modelNumber, String batchNumber, String sectionNumber);


    /**
     * 组件导入-确认导入
     */
    IsfdModelManagementConfirmImportPartVo componentConfirmImport(List<IsfdModelManagementPartBo> boList, LoginUser loginUser);
}
